
using System.Drawing;
using FastColoredTextBoxNS;
using System.ComponentModel.Composition;

namespace SS.Ynote.Classic.Themes
{
    [InheritedExport(typeof(IYnoteThemeExtension))]
    public class MonokaiThemeCore : IYnoteThemeExtension
    {
        public string Name
        {
            get { return "Monokai"; }
        }

        public string Author
        {
            get { return ""; }
        }

        public IYnoteTheme Theme
        {
            get { return new MonoKai(); }
        }
        public class MonoKai : IYnoteTheme
        {
            /// <summary>
            /// String style
            /// </summary>
            public Style StringStyle
            {
                get { return new TextStyle(new SolidBrush(Color.FromArgb(230, 219, 116)), null, FontStyle.Regular); }
            }
            public Style CharStyle
            {
                get { return new TextStyle(Brushes.Gray, null, FontStyle.Regular); }
            }
            /// <summary>
            /// Comment style
            /// </summary>
            public Style CommentStyle { get { return new TextStyle(new SolidBrush(Color.FromArgb(117, 113, 94)), null, FontStyle.Regular); } }
            /// <summary>
            /// Number style
            /// </summary>
            public Style NumberStyle { get { return new TextStyle(Brushes.Orchid, null, FontStyle.Regular); } }
            /// <summary>
            /// C# attribute style
            /// </summary>
            public Style AttributeStyle { get { return new TextStyle(Brushes.LawnGreen, null, FontStyle.Regular); } }
            /// <summary>
            /// Class name style
            /// </summary>
            public Style ClassNameStyle { get { return new TextStyle(Brushes.DarkOrange, null, FontStyle.Regular); } }
            /// <summary>
            /// Keyword style
            /// </summary>
            public Style KeywordStyle { get { return new TextStyle(Brushes.DeepPink, null, FontStyle.Regular); } }
            /// <summary>
            /// Style of tags in comments of C#
            /// </summary>
            public Style CommentTagStyle { get { return new TextStyle(Brushes.Gray, null, FontStyle.Italic); } }

            /// <summary>
            /// HTML attribute value style
            /// </summary>
            public Style AttributeValueStyle { get { return StringStyle; } }
            /// <summary>
            /// HTML tag brackets style
            /// </summary>
            public Style TagBracketStyle { get { return new TextStyle(Brushes.White, null, FontStyle.Regular); } }
            /// <summary>
            /// HTML tag name style
            /// </summary>
            public Style TagNameStyle { get { return KeywordStyle; } }
            /// <summary>
            /// HTML Entity style
            /// </summary>
            public Style HtmlEntityStyle { get { return new TextStyle(Brushes.RoyalBlue, null, FontStyle.Regular); } }

            /// <summary>
            /// Variable style
            /// </summary>
            public Style VariableStyle { get { return new TextStyle(Brushes.RoyalBlue, null, FontStyle.Regular); } }
            /// <summary>
            /// Specific PHP keyword style
            /// </summary>
            public Style KeywordStyle2 { get { return new TextStyle(Brushes.LightSkyBlue, null, FontStyle.Regular); } }
            /// <summary>
            /// Specific PHP keyword style
            /// </summary>
            public Style KeywordStyle3 { get { return new TextStyle(Brushes.LightSkyBlue, null, FontStyle.Regular); } }
            /// <summary>
            /// SQL Statements style
            /// </summary>
            public Style StatementsStyle { get { return new TextStyle(Brushes.HotPink, null, FontStyle.Bold); } }
            /// <summary>
            /// SQL Functions style
            /// </summary>
            public Style FunctionsStyle { get { return KeywordStyle; } }
            /// <summary>
            /// SQL Types style
            /// </summary>
            public Style TypesStyle { get { return new TextStyle(Brushes.SlateBlue, null, FontStyle.Bold); } }
            /// <summary>
            /// CSS Selector Style
            /// </summary>
            public Style CSSSelectorStyle { get { return new TextStyle(Brushes.HotPink, null, FontStyle.Bold); } }
            /// <summary>
            /// CSS Property Style
            /// </summary>
            public Style CSSPropertyStyle { get { return KeywordStyle3; } }
            /// <summary>
            /// Python Ruby Class Name Style
            /// </summary>
            public Style ClassNameStyle2 { get { return new TextStyle(Brushes.LawnGreen, null, FontStyle.Regular); } }
            /// <summary>
            /// Back Brsuh
            /// </summary>
            public Color BackColor { get { return Color.FromArgb(210, Color.Black); } }
            /// <summary>Black
            /// Fore Color
            /// </summary>
            public Color ForeColor { get { return Color.White; } }
            /// <summary>
            /// Bookmark Color
            /// </summary>
            public Color BookmarkColor { get { return Color.Gainsboro; } }
            /// <summary>
            /// Line Number Color
            /// </summary>
            public Color LineNumberColor { get { return Color.WhiteSmoke; } }
            /// <summary>
            /// Current Line Color
            /// </summary>
            public Color CurrentLineColor { get { return Color.FromArgb(20, Color.LightGray); } }
            /// <summary>
            /// Selection Color
            /// </summary>
            public Color SelectionColor { get { return Color.FromArgb(60, Color.LightGray); } }
            /// <summary>
            /// Folding Indication Color
            /// </summary>
            public Color FoldingColor { get { return Color.LightGray; } }
            /// <summary>
            /// Caret Color
            /// </summary>
            public Color CaretColor { get { return Color.White; } }
            /// <summary>
            /// 
            /// </summary>
            public Brush BracketBrush1 { get { return new SolidBrush(Color.FromArgb(40, Color.SlateGray)); } }
            /// <summary>
            /// Bracket Brush 2
            /// </summary>
            public Brush BracketBrush2 { get { return new SolidBrush(Color.FromArgb(40, Color.LightGreen)); } }
            /// <summary>
            /// Line Number Padding Color
            /// </summary>
            public Color LineNumberPaddingColor { get { return Color.FromArgb(20, Color.Black); } }
            /// <summary>
            /// Service Line Color
            /// </summary>
            public Color ServiceLineColor { get { return Color.FromArgb(80, Color.Black); } }
            /// <summary>
            /// Hyperlink Color
            /// </summary>
            public Color HyperLinkColor { get { return Color.DeepPink; } }
        }
    }
}
